//翻转图像
/*给定一个 n x n 的二进制矩阵 image ，先 水平 翻转图像，然后 反转 图像并返回 结果 。

水平翻转图片就是将图片的每一行都进行翻转，即逆序。

例如，水平翻转 [1,1,0] 的结果是 [0,1,1]。
反转图片的意思是图片中的 0 全部被 1 替换， 1 全部被 0 替换。

例如，反转 [0,1,1] 的结果是 [1,0,0]。
*/
class Solution {
public:
    vector<vector<int>> flipAndInvertImage(vector<vector<int>>& image) {
        for (auto& nums : image) {
            reverse(nums.begin(), nums.end());
        }
        for (auto& nums : image) {
            for (int i = 0; i < nums.size(); i++) {
                if (nums[i])
                    nums[i] = 0;
                else
                    nums[i] = 1;
            }
        }
        return image;
    }
};


//检查相同字母间的距离
/*给你一个下标从 0 开始的字符串 s ，该字符串仅由小写英文字母组成，s 中的每个字母都 恰好 出现 两次 。另给你一个下标从 0 开始、长度为 26 的的整数数组 distance 。

字母表中的每个字母按从 0 到 25 依次编号（即，'a' -> 0, 'b' -> 1, 'c' -> 2, ... , 'z' -> 25）。

在一个 匀整 字符串中，第 i 个字母的两次出现之间的字母数量是 distance[i] 。如果第 i 个字母没有在 s 中出现，那么 distance[i] 可以 忽略 。

如果 s 是一个 匀整 字符串，返回 true ；否则，返回 false 。

 */
 class Solution {
public:
    bool checkDistances(string s, vector<int>& distance) {
        int hash1[26] = {0};
        // int hash2[26]={0};
        for (int i = 0; i < s.size(); i++) {
            if (hash1[s[i] - 'a']) {
                if (i - hash1[s[i] - 'a'] != distance[s[i] - 'a'])
                    return false;
            } else {
                hash1[s[i] - 'a'] = i + 1;
            }
        }
        return true;
    }
};